package cn.com.cifi.mars.util;

import cn.com.cifi.mars.constant.IsDeleteEnum;
import cn.com.cifi.mars.constant.VersionIdentifyEnum;
import cn.com.cifi.mars.constant.VersionStatusEnum;
import cn.com.cifi.mars.constant.VersionTypeEunm;
import cn.com.cifi.mars.entity.*;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

public class VersionNameUtils {

    //版本名称规则：
    //1、月度动态版：
    //规则： {归属月份}月动态版{版本号}-{最后更新时间}
    //示例：201910月动态版V1-20191201；
    //2、投资版、战规版、大定价版：
    //规则：{版本类型}{版本号}-{最后更新时间}
    //示例：投资版V1-20191102，战规版V3-20191102，大定价版V2-20191102
    //3、预算版：
    //规则：{预算年份}{全年/年中}预算版{版本号}-{最后更新时间}
    //示例：2019全年预算版V1-20181212，2019全年预算版V5-20190331，
    //2019年中预算版V1-20190501，2019年中预算版V5-20190831
    //4、审批通过后才显示最后更新时间，过程中不显示（显示状态）；
    public static final String getVersionName(PriceVersion version) {
        String versionName = "";

        String versionType = version.getVersionType();
        String versionState = version.getVersionState();
        if (versionType.equals(VersionTypeEunm.DYNAMIC.getKey())){
            LocalDate ascriptionDate = version.getAscriptionDate();
            String yearAndMonth = ascriptionDate.getYear() + "" + ascriptionDate.getMonthValue();
            versionName = yearAndMonth + "月动态版" + version.getVersionNum();
            if (versionState.equals(VersionStatusEnum.SUCCESSAPPROVED.getKey()) ||
                    versionState.equals(VersionStatusEnum.SYSGENERATION.getKey())){
                versionName = versionName + "-" + version.getUpdateTime().format(DateTimeFormatter.ofPattern("yyyyMMdd"));
            }
        }else{
            versionName = VersionTypeEunm.getValueByKey(versionType) + version.getVersionNum();
            if (versionState.equals(VersionStatusEnum.SUCCESSAPPROVED.getKey()) ||
                    versionState.equals(VersionStatusEnum.SYSGENERATION.getKey())){
                versionName = versionName + "-" + version.getUpdateTime().format(DateTimeFormatter.ofPattern("yyyyMMdd"));
            }
            if (version.getIsAssessmentVersion() != null && version.getIsAssessmentVersion().equals(IsDeleteEnum.YES.getKey())){
                versionName = versionName + "(考核版)";
            }
        }

        return versionName;
    }

    /**
     *
     * 方法描述：1、月度动态版：
     规则： {归属月份}月动态版{版本号}-{最后更新时间}
     示例：201910月动态版V1-20191201；
     2、投资版、战规版、大定价版：
     规则：{版本类型}{版本号}-{最后更新时间}
     示例：投资版V1-20191102，战规版V3-20191102，大定价版V2-20191102
     3、预算版：
     规则：{预算年份}{全年/年中}预算版{版本号}-{最后更新时间}
     示例：2019全年预算版V1-20181212，2019全年预算版V5-20190331，
     2019年中预算版V1-20190501，2019年中预算版V5-20190831
     * @param supplyPlanVersion
     * @return String
     * 创建人：yyd
     * 创建时间：2019年12月6日 下午3:38:09
     */
    public static String getVersionName(SupplyPlanVersion supplyPlanVersion) {
        String versionName="";
        String versionType = supplyPlanVersion.getVersionType();
        String versionTypeName = VersionTypeEunm.getValueByKey(versionType);
        String vesionNum = supplyPlanVersion.getVersionNum();
        String lastDate = "";
        if(supplyPlanVersion.getUpdateTime() != null) {
            lastDate = LocalDateTimeUtils.formatTime(supplyPlanVersion.getUpdateTime(), "yyyyMMdd");
        }else {
            lastDate = LocalDateTimeUtils.formatTime(supplyPlanVersion.getCreateTime(), "yyyyMMdd");
        }
        if(versionType.equals(VersionTypeEunm.INVESTMENT.getKey()) || versionType.equals(VersionTypeEunm.WARPLAN.getKey())) {
            String assessmentTag="";
            Integer isAssessmentVersion = supplyPlanVersion.getIsAssessmentVersion();
            if(isAssessmentVersion != null && isAssessmentVersion.intValue() == 1) {
                assessmentTag = "(考核版)";
            }
            versionName = versionTypeName+vesionNum+"-"+lastDate+assessmentTag;
        }else if(versionType.equals(VersionTypeEunm.BUDGET.getKey())) {
            String budgetYear = supplyPlanVersion.getBudgetYear();
            String versionIdentifyName = VersionIdentifyEnum.getValueByKey(supplyPlanVersion.getVersionIdentify());
            versionName = budgetYear+versionIdentifyName+"预算版"+vesionNum+"-"+lastDate;
        }else {
            String affiliationMonth = supplyPlanVersion.getAffiliationMonth();
            if(StrUtils.isNotEmpty(affiliationMonth)) {
                affiliationMonth = affiliationMonth.replace("-","");
            }
            versionName = affiliationMonth+"月动态版"+vesionNum+"-"+lastDate;
        }
        return versionName;
    }

    /**
     * 签约
     * @param spv
     * @return
     */
    public static String getVersionName(SignPlanVersion spv) {
        String versionName = "";

        String versionNum = spv.getVersionNum();
        String versionType = spv.getVersionType();
        String versionTypeName = VersionTypeEunm.getValueByKey(versionType);
        String versionState = spv.getVersionState();
        String versionCreateTime = LocalDateTimeUtils.formatTime(spv.getCreateTime(), DateUtils.DATE_KEY_SMALL_STR);

        if(versionType.equals(VersionTypeEunm.BUDGET.getKey())){
            //版本标识
            String versionIdentifyName = spv.getVersionIdentify();
            versionName = versionIdentifyName + versionNum + "-" + versionCreateTime;
        }else if(versionType.equals(VersionTypeEunm.DYNAMIC.getKey())){
            //归属月份
            String yearMonth = spv.getAffiliationMonth().replace("-", "");
            versionName =  yearMonth + "月" + versionTypeName+versionNum;
        }else {
            versionName = versionTypeName+versionNum;
        }
        if(versionState.equals(VersionStatusEnum.SUCCESSAPPROVED.getKey())){
            //最后更新时间
            LocalDateTime updateTime = spv.getUpdateTime();
            if(updateTime==null){
                updateTime=spv.getCreateTime();
            }
            //最后更新时间年-月-日
            String updateName = LocalDateTimeUtils.formatTime(updateTime, "yyyyMMdd");

            versionName = versionName + "-" + updateName;
            if (spv.getIsAssessmentVersion()!=null && spv.getIsAssessmentVersion().equals(IsDeleteEnum.YES.getKey())){
                versionName = versionName + "(考核版)";
            }
        }else {
            if (spv.getIsAssessmentVersion()!=null && spv.getIsAssessmentVersion().equals(IsDeleteEnum.YES.getKey())){
                versionName = versionName + "(考核版)";
            }

        }

        return versionName;
    }

    public static String getVersionName(ReturnPlanVersion returnPlanVersion) {
        String versionName = "";
        String versionNum = returnPlanVersion.getVersionNum();
        String versionType = returnPlanVersion.getVersionType();
        String versionTypeName = VersionTypeEunm.getValueByKey(versionType);
        String versionState = returnPlanVersion.getVersionState();
        //最后更新时间
        LocalDateTime updateTime = returnPlanVersion.getUpdateTime();
        if(updateTime==null){
            updateTime=returnPlanVersion.getCreateTime();
        }
        //最后更新时间年-月-日
        String updateName = LocalDateTimeUtils.formatTime(updateTime, "yyyyMMdd");
        
        if(versionType.equals(VersionTypeEunm.BUDGET.getKey())){
            versionName = returnPlanVersion.getVersionIdentify() + versionNum + "-" + updateName;
        }else if(versionType.equals(VersionTypeEunm.DYNAMIC.getKey())){
            String yearMonth = returnPlanVersion.getAffiliationMonth().replace("-", "");
            versionName =  yearMonth + "月" + versionTypeName+versionNum;
        }else {
            versionName = versionTypeName+versionNum;
        }
        
        if(versionState.equals(VersionStatusEnum.SUCCESSAPPROVED.getKey())){
            versionName = versionName + "-" + updateName;
            if (returnPlanVersion.getIsAssessment()!=null && returnPlanVersion.getIsAssessment().equals(IsDeleteEnum.YES.getKey())){
                versionName = versionName + "(考核版)";
            }
        }else {
            if (returnPlanVersion.getIsAssessment()!=null && returnPlanVersion.getIsAssessment().equals(IsDeleteEnum.YES.getKey())){
                versionName = versionName + "(考核版)";
            }
        }

        return versionName;
    }

}
